home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 25
/
AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso
/
PublicDomain
/
Anwendungen
/
DMAmon
/
DMAmon.text
< prev
next >
Wrap
Text File
|
1999-10-26
|
6KB
|
123 lines
DMAmon by Simon N Goodwin
DMAmon indicates in a Workbench window when Amiga disk drives
and sound channels are in use. Source code in HiSoft BASIC is
included.
This program is an expanded version of a utility written by
Simon N Goodwin for the current Amiga Format magazine tutorial
series 'Banging The Metal'. This special version for Aminet is
published under the author's agreement with Future Publishing,
which allows non-exclusive distribution of material written for
the magazine, six months after publication. It is hoped that
other examples and tutorials wil lbe made more widely available
this way. You can already read an extended version of the Amiga
Format Emulation series on the web, thanks to Simon Goodwin and
Thomas Amsrud, who translated the original to HTML. To read
this, go to:
http://www.emulnews.com/aer/articles/af/
The example program
DMAmon uses HiSoft BASIC to monitor disk and audio memory
access. It works by checking the DMACONR and DSKBYTR registers
at regular intervals.The only explicit system call is to Delay,
in the DOS library, linked by the first couple of lines. This
prevents the program hogging the CPU, updating faster than the
eye can see, by periodically surrendering time to other tasks.
The value after Delay, near the end, counts display fields
before the loop repeats. Press Control C to stop the task. On my
PAL A4000 Delay &20 permits updates two or three times per
second, draining less than 1.5 per cent of the CPU time. Delay
&10 updates twice as fast, six times per second on NTSC
displays, and so on. Alternatively you might give the program a
negative priority, so it defers to foreground tasks.
Scattered &s indicate HiSoft BASIC long word values, versus %
for 16 bit integers. &H preceeds hex values (like $ in assembler
or 0x in C) such as the custom register base, &hDFF000, and &B
denotes binary.
Disk DMA
The floppy disk DMA channel can read or write data to up to four
drives. The second and third most significant bits in DSKBYTR
show when this is happening. The second (bit 14, masked out with
binary in the listing) is set while disk DMA is is progress. The
third (bit 13) is set during floppy writes.
This helps reveal why your drives are grinding away. Some
programs leave the drive motors running when there's no DMA, so
disks can safely be removed. Beware of removing a disk even when
apparently just reading; the system may switch to writing before
your finger reaches the eject button. You'll soon learn when
this is likely, with DMAmon as your guide.
Sound DMA
It's similarly useful to monitor active sound channels. Sound
channels are a scarce resource and should be shared. Some
applications require channels, and a few nasty ones hog them,
even when not in use. DMAmon shows the status of each of the
four channels dynamically, with 0 for a free channel and 1 if
the channel is in use.
You could recode this to use graphics or left/right grouping
rather than hardware chanel order. I've done it the obvious way
for BASIC, extracting four adjacent bits with AND then
converting to binary with BIN$. The prefix "000" and RIGHT$(,4)
make leading zeros explicit.
Typically, Amiga registers combine several functions, assigning
distinct control to each bit. Each one or zero bit indicates a
distinct state in the underlying hardware. The table lists the
significance of bits in DMACONR and DSKBYTR.
DMACONR is a read-only version of DMACON. Like other crucial
controls, the 'top' (most significant) bit indicates setting or
clearing of other bits - so a single write with one bit set
CLEARs just that bit! If the top bit and others are set, those
are added to the ones already set. This brilliance saves
reading, masking and writing values back, and eases Copper
programming.
These are readily accessible, but not the only DMA control bits.
BPLCON ($DFF100) determines the number of bitplanes in use.
There's no BPLCONR so you must record changes. DMAmon does not
monitor bitplane DMA as it's static for a given display mode,
and you won't see anything if it's turned off! Sprite DMA could
be monitored but most programs disable sprites by changing to a
small transparent pattern or parking them in the border, rather
than stopping their DMA.
The Copper is constantly active, but usually only gains priority
over the CPU for a few microseconds at a time. It would be
interesting to monitor Blitter activity, but difficult in Amiga
OS windows; the system uses blits to update them, so you can't
report the Blitter's status unless it is idle!
Simon N Goodwin, Oldbury, March 1999, Aminet Update October 1999
Table: Sample DMA register bit assignments
Bit DMACON DSKBYTR
15 Set/Clear Data Valid
14 Blitter Busy DMA active
13 Blitter Zero Disk writing
12 Unassigned Sync match
11 Unassigned Unassigned
10 Blitter Nasty Unassigned
9 Master DMA Unassigned
8 Bitplane DMA Unassigned
7 Copper DMA Data bit 7
6 Blitter DMA Data bit 6
5 Sprite DMA Data bit 5
4 Floppy DMA Data bit 4
3 Right audio 2 Data bit 3
2 Left audio 2 Data bit 2
1 Left audio 1 Data bit 1
0 Right audio 1 Data bit 0